openapi: 3.0.2
info:
  title: 'Foodgram'
  version: ''
paths:
  /api/users/:
    get:
      operationId: Список пользователей
      description: ''
      parameters:
        - name: page
          required: false
          in: query
          description: Номер страницы.
          schema:
            type: integer
        - name: limit
          required: false
          in: query
          description: Количество объектов на странице.
          schema:
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    example: 123
                    description: 'Общее количество объектов в базе'
                  next:
                    type: string
                    nullable: true
                    format: uri
                    example: http://foodgram.example.org/api/users/?page=4
                    description: 'Ссылка на следующую страницу'
                  previous:
                    type: string
                    nullable: true
                    format: uri
                    example: http://foodgram.example.org/api/users/?page=2
                    description: 'Ссылка на предыдущую страницу'
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
                    description: 'Список объектов текущей страницы'
          description: ''
      tags:
        - Пользователи
    post:
      operationId: Регистрация пользователя
      description: ''
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomUserCreate'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomUserResponseOnCreate'
          description: 'Пользователь успешно создан'
        '400':
          $ref: '#/components/responses/ValidationError'
      tags:
        - Пользователи
  /api/tags/:
    get:
      operationId: Cписок тегов
      description: ''
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Tag'
          description: ''
      tags:
      - Теги
  /api/tags/{id}/:
    get:
      operationId: Получение тега
      description: ''
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого Тега."
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tag'
          description: ''
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
      - Теги
  /api/recipes/:
    get:
      operationId: Список рецептов
      description: Страница доступна всем пользователям. Доступна фильтрация по избранному, автору, списку покупок и тегам.
      parameters:
      - name: page
        required: false
        in: query
        description: Номер страницы.
        schema:
          type: integer
      - name: limit
        required: false
        in: query
        description: Количество объектов на странице.
        schema:
          type: integer
      - name: is_favorited
        required: false
        in: query
        description: Показывать только рецепты, находящиеся в списке избранного.
        schema:
          type: integer
          enum: [0, 1]
      - name: is_in_shopping_cart
        required: false
        in: query
        description: Показывать только рецепты, находящиеся в списке покупок.
        schema:
          type: integer
          enum: [0, 1]
      - name: author
        required: false
        in: query
        description: Показывать рецепты только автора с указанным id.
        schema:
          type: integer
      - name: tags
        required: false
        in: query
        description: Показывать рецепты только с указанными тегами (по slug)
        example: 'lunch&tags=breakfast'

        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    example: 123
                    description: 'Общее количество объектов в базе'
                  next:
                    type: string
                    nullable: true
                    format: uri
                    example: http://foodgram.example.org/api/recipes/?page=4
                    description: 'Ссылка на следующую страницу'
                  previous:
                    type: string
                    nullable: true
                    format: uri
                    example: http://foodgram.example.org/api/recipes/?page=2
                    description: 'Ссылка на предыдущую страницу'
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/RecipeList'
                    description: 'Список объектов текущей страницы'
          description: ''
      tags:
      - Рецепты
    post:
      security:
        - Token: []
      operationId: Создание рецепта
      description: 'Доступно только авторизованному пользователю'
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecipeCreateUpdate'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecipeList'
          description: 'Рецепт успешно создан'
        '400':
          description: 'Ошибки валидации в стандартном формате DRF'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '401':
          $ref: '#/components/schemas/AuthenticationError'
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
        - Рецепты
  /api/recipes/download_shopping_cart/:
    get:
      security:
        - Token: [ ]
      operationId: Скачать список покупок
      description: 'Скачать файл со списком покупок. Это может быть TXT/PDF/CSV. Важно, чтобы контент файла удовлетворял требованиям задания. Доступно только авторизованным пользователям.'
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/pdf:
              schema:
                type: string
                format: binary
            text/plain:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
      - Список покупок
  /api/recipes/{id}/:
    get:
      operationId: Получение рецепта
      description: ''
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого рецепта"
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecipeList'
          description: ''
      tags:
      - Рецепты
    put:
      operationId: Обновление рецепта
      security:
        - Token: [ ]
      description: 'Доступно только автору данного рецепта'
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого рецепта."
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecipeCreateUpdate'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecipeList'
          description: 'Рецепт успешно обновлен'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/PermissionDenied'
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
      - Рецепты
    delete:
      operationId: Удаление рецепта

      description: 'Доступно только автору данного рецепта'
      security:
        - Token: [ ]
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого рецепта"
        schema:
          type: string
      responses:
        '204':
          description: 'Рецепт успешно удален'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/PermissionDenied'
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
      - Рецепты
  /api/recipes/{id}/favorite/:
    get:
      operationId: Добавить рецепт в избранное
      description: 'Доступно только авторизованному пользователю.'
      security:
        - Token: [ ]
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого рецепта"
        schema:
          type: string
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecipeMinified'
          description: 'Рецепт успешно добавлен в избранное'
        '400':
          description: 'Ошибка добавления в избранное (Например, когда рецепт уже есть в избранном)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SelfMadeError'
        '401':
          $ref: '#/components/responses/AuthenticationError'

      tags:
      - Избранное
    delete:
      operationId: Удалить рецепт из избранного
      description: 'Доступно только авторизованным пользователям'
      security:
        - Token: [ ]
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого рецепта."
        schema:
          type: string
      responses:
        '204':
          description: 'Рецепт успешно удален из избранного'
        '400':
          description: 'Ошибка удаления из избранного (Например, когда рецепта там не было)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SelfMadeError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
      - Избранное
  /api/recipes/{id}/shopping_cart/:
    get:
      operationId: Добавить рецепт в список покупок
      description: 'Доступно только авторизованным пользователям'
      security:
        - Token: [ ]
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого рецепта."
        schema:
          type: string
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecipeMinified'
          description: 'Рецепт успешно добавлен в список покупок'
        '400':
          description: 'Ошибка добавления в список покупок (Например, когда рецепт уже есть в списке покупок)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SelfMadeError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
      - Список покупок
    delete:
      operationId: Удалить рецепт из списка покупок
      description: 'Доступно только авторизованным пользователям'
      security:
        - Token: [ ]
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого рецепта."
        schema:
          type: string
      responses:
        '204':
          description: 'Рецепт успешно удален из списка покупок'
        '400':
          description: 'Ошибка удаления из списка покупок (Например, когда рецепта там не было)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SelfMadeError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
      - Список покупок
  /api/users/{id}/:
    get:
      operationId: Профиль пользователя
      description: 'Доступно только авторизованным пользователям.'
      security:
        - Token: [ ]
      parameters:
        - name: id
          in: path
          required: true
          description: "Уникальный id этого пользователя"
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          description: ''
        '404':
          $ref: '#/components/responses/NotFound'
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
        - Пользователи
  /api/users/me/:
    get:
      operationId: Текущий пользователь
      description: ''
      parameters: []
      security:
        - Token: [ ]
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          description: ''
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
      - Пользователи
  /api/users/subscriptions/:
    get:
      operationId: Мои подписки
      description: 'Возвращает пользователей, на которых подписан текущий пользователь. В выдачу добавляются рецепты.'
      parameters:
        - name: page
          required: false
          in: query
          description: Номер страницы.
          schema:
            type: integer
        - name: limit
          required: false
          in: query
          description: Количество объектов на странице.
          schema:
            type: integer
        - name: recipes_limit
          required: false
          in: query
          description: Количество объектов внутри поля recipes.
          schema:
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    example: 123
                    description: 'Общее количество объектов в базе'
                  next:
                    type: string
                    nullable: true
                    format: uri
                    example: http://foodgram.example.org/api/users/subscriptions/?page=4
                    description: 'Ссылка на следующую страницу'
                  previous:
                    type: string
                    nullable: true
                    format: uri
                    example: http://foodgram.example.org/api/users/subscriptions/?page=2
                    description: 'Ссылка на предыдущую страницу'
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/UserWithRecipes'
                    description: 'Список объектов текущей страницы'
          description: ''
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
      - Подписки
  /api/users/{id}/subscribe/:
    get:
      operationId: Подписаться на пользователя
      description: 'Доступно только авторизованным пользователям'
      security:
        - Token: [ ]
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого пользователя."
        schema:
          type: string
      - name: recipes_limit
        required: false
        in: query
        description: Количество объектов внутри поля recipes.
        schema:
          type: integer
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserWithRecipes'
          description: 'Подписка успешно создана'
        '400':
          description: 'Ошибка подписки (Например, если уже подписан или при подписке на себя самого)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SelfMadeError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
      - Подписки
    delete:
      operationId: Отписаться от пользователя
      description: 'Доступно только авторизованным пользователям'
      security:
        - Token: [ ]
      parameters:
      - name: id
        in: path
        required: true
        description: "Уникальный идентификатор этого пользователя."
        schema:
          type: string
      responses:
        '204':
          description: 'Успешная отписка'
        '400':
          description: 'Ошибка отписки (Например, если не был подписан)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SelfMadeError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '404':
          $ref: '#/components/responses/NotFound'

      tags:
      - Подписки
  /api/ingredients/:
    get:
      operationId: Список ингредиентов
      description: 'Список ингредиентов с возможностью поиска по имени.'
      parameters:
        - name: name
          required: false
          in: query
          description: Поиск по частичному вхождению в начале названия ингредиента.
          schema:
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Ingredient'
          description: ''
      tags:
      - Ингредиенты
  /api/ingredients/{id}/:
    get:
      operationId: Получение ингредиента
      description: 'Уникальный идентификатор этого ингредиента.'
      parameters:
      - name: id
        in: path
        required: true
        description: ''
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ingredient'
          description: ''
      tags:
      - Ингредиенты
  /api/users/set_password/:
    post:
      operationId: Изменение пароля
      description: 'Изменение пароля текущего пользователя'
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetPassword'
      responses:
        '204':
          description: 'Пароль успешно изменен'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
      - Пользователи
  /api/auth/token/login/:
    post:
      operationId: Получить токен авторизации
      description: Используется для авторизации по логину и паролю, чтобы далее использовать токен при запросах.
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenCreate'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenGetResponse'
          description: ''
      tags:
      - Пользователи
  /api/auth/token/logout/:
    post:
      operationId: Удаление токена
      description: Удаляет токен текущего пользователя
      parameters: []
      requestBody:
        content:
          application/json:
            schema: {}

      responses:
        '201':
          content:
            application/json:
              schema: {}
          description: ''
        '401':
          $ref: '#/components/responses/AuthenticationError'
      tags:
      - Пользователи
components:
  schemas:
    User:
      description:  'Пользователь (В рецепте - автор рецепта)'
      type: object
      properties:
        email:
          type: string
          format: email
          maxLength: 254
          description: "Адрес электронной почты"
        id:
          type: integer
          readOnly: true
        username:
          type: string
          description: "Уникальный юзернейм"
          pattern: ^[\w.@+-]+\z
          maxLength: 150
        first_name:
          type: string
          maxLength: 150
          description: "Имя"
          example: "Вася"
        last_name:
          type: string
          maxLength: 150
          description: "Фамилия"
          example: "Пупкин"
        is_subscribed:
          type: boolean
          readOnly: true
          description: "Подписан ли текущий пользователь на этого"
          example: false
      required:
      - username
    UserWithRecipes:
      description: 'Расширенный объект пользователя с рецептами'
      type: object
      properties:
        email:
          type: string
          format: email
          maxLength: 254
          description: "Адрес электронной почты"
        id:
          type: integer
          readOnly: true
        username:
          type: string
          description: "Уникальный юзернейм"
          pattern: ^[\w.@+-]+\z
          maxLength: 150
        first_name:
          type: string
          maxLength: 150
          description: "Имя"
          example: "Вася"
        last_name:
          type: string
          maxLength: 150
          description: "Фамилия"
          example: "Пупкин"
        is_subscribed:
          type: boolean
          readOnly: true
          description: "Подписан ли текущий пользователь на этого"
        recipes:
          type: array
          items:
            $ref: '#/components/schemas/RecipeMinified'
        recipes_count:
          type: integer
          description: 'Общее количество рецептов пользователя'

    Tag:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 200
          description: 'Название'
          example: 'Завтрак'
        color:
          type: string
          nullable: true
          maxLength: 7
          description: 'Цвет в HEX'
          example: '#E26C2D'
        slug:
          type: string
          nullable: true
          maxLength: 200
          pattern: ^[-a-zA-Z0-9_]+$
          description: 'Уникальный слаг'
          example: 'breakfast'
      required:
      - name
    RecipeList:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          description: 'Уникальный id'
        tags:
          description: 'Список тегов'
          type: array
          items:
            $ref: '#/components/schemas/Tag'
        author:
          $ref: '#/components/schemas/User'
        ingredients:
          description: 'Список ингредиентов'
          type: array
          items:
            $ref: '#/components/schemas/IngredientInRecipe'
        is_favorited:
          type: boolean
          description: 'Находится ли в избранном'
        is_in_shopping_cart:
          type: boolean
          description: 'Находится ли в корзине'
        name:
          type: string
          maxLength: 200
          description: 'Название'
        image:
          description: 'Ссылка на картинку на сайте'
          example: 'http://foodgram.example.org/media/recipes/images/image.jpeg'
          type: string
          format: url
        text:
          description: 'Описание'
          type: string
        cooking_time:
          description: 'Время приготовления (в минутах)'
          type: integer
          minimum: 1
      required:
      - tags
      - author
      - is_favorited
      - is_in_shopping_cart
      - name
      - image
      - text
      - cooking_time
    RecipeMinified:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          description: 'Уникальный id'
        name:
          type: string
          maxLength: 200
          description: 'Название'
        image:
          description: 'Ссылка на картинку на сайте'
          example: 'http://foodgram.example.org/media/recipes/images/image.jpeg'
          type: string
          format: url
        cooking_time:
          description: 'Время приготовления (в минутах)'
          type: integer
          minimum: 1
    Ingredient:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 200
          example: 'Капуста'
        measurement_unit:
          type: string
          maxLength: 200
          example: 'кг'
      required:
      - name
      - measurement_unit
    IngredientInRecipe:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 200
          description: 'Название'
          example: 'Картофель отварной'
        measurement_unit:
          type: string
          maxLength: 200
          description: 'Единицы измерения'
          example: 'г'
        amount:
          type: integer
          description: 'Количество'
          minimum: 1

      required:
        - name
        - measurement_unit
    CustomUserCreate:
      type: object
      properties:
        email:
          type: string
          format: email
          maxLength: 254
          description: "Адрес электронной почты"
          example: "vpupkin@yandex.ru"
        id:
          type: integer
          readOnly: true
        username:
          type: string
          description: "Уникальный юзернейм"
          pattern: ^[\w.@+-]+\z
          maxLength: 150
          example: "vasya.pupkin"
        first_name:
          type: string
          maxLength: 150
          description: "Имя"
          example: "Вася"
        last_name:
          type: string
          maxLength: 150
          description: "Фамилия"
          example: "Пупкин"
        password:
          type: string
          maxLength: 150
          description: "Пароль"
          example: "Qwerty123"
      required:
      - username
      - password
      - first_name
      - last_name
      - email
    CustomUserResponseOnCreate:
      type: object
      properties:
        email:
          type: string
          format: email
          maxLength: 254
          description: "Адрес электронной почты"
          example: "vpupkin@yandex.ru"
        id:
          type: integer
          readOnly: true
        username:
          type: string
          description: "Уникальный юзернейм"
          pattern: ^[\w.@+-]+\z
          maxLength: 150
          example: "vasya.pupkin"
        first_name:
          type: string
          maxLength: 150
          description: "Имя"
          example: "Вася"
        last_name:
          type: string
          maxLength: 150
          description: "Фамилия"
          example: "Пупкин"
      required:
        - username
        - first_name
        - last_name
        - email
    Activation:
      type: object
      properties:
        uid:
          type: string
        token:
          type: string
      required:
      - uid
      - token
    SendEmailReset:
      type: object
      properties:
        email:
          type: string
          format: email
      required:
      - email
    PasswordResetConfirm:
      type: object
      properties:
        uid:
          type: string
        token:
          type: string
        new_password:
          type: string
      required:
      - uid
      - token
      - new_password
    UsernameResetConfirm:
      type: object
      properties:
        new_email:
          type: string
          format: email
          maxLength: 254
    SetPassword:
      type: object
      properties:
        new_password:
          type: string
        current_password:
          type: string
      required:
      - new_password
      - current_password
    SetUsername:
      type: object
      properties:
        current_password:
          type: string
        new_email:
          type: string
          format: email
          maxLength: 254
      required:
      - current_password
    TokenCreate:
      type: object
      properties:
        password:
          type: string
        email:
          type: string
    TokenGetResponse:
      type: object
      properties:
        auth_token:
          type: string
    RecipeCreateUpdate:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        ingredients:
          description: Список ингредиентов
          type: array
          items:
            example:
              id: 1123
              amount: 10
            type: object
            properties:
              id:
                description: 'Уникальный id'
                type: integer
              amount:
                description: 'Количество в рецепте'
                type: integer
            required:
            - id
            - amount
        tags:
          description: 'Список id тегов'
          type: array
          example: [1, 2]
          items:
            type: integer
        image:
          description: 'Картинка, закодированная в Base64'
          example: ''
          type: string
          format: binary
        name:
          description: 'Название'
          type: string
          maxLength: 200
        text:
          description: 'Описание'
          type: string
        cooking_time:
          description: 'Время приготовления (в минутах)'
          type: integer
          minimum: 1
      required:
      - ingredients
      - tags
      - image
      - name
      - text
      - cooking_time

    ValidationError:
      description: Стандартные ошибки валидации DRF
      type: object
      properties:
        field_name:
          description: 'Название поля, в котором произошли ошибки. Таких полей может быть несколько'
          example: [ 'Обязательное поле.' ]
          type: array
          items:
            type: string

    SelfMadeError:
      description: Ошибка
      type: object
      properties:
        errors:
          description: 'Описание ошибки'
          type: string

    AuthenticationError:
      description: Пользователь не авторизован
      type: object
      properties:
        detail:
          description: 'Описание ошибки'
          example: "Учетные данные не были предоставлены."
          type: string

    PermissionDenied:
      description: Недостаточно прав
      type: object
      properties:
        detail:
          description: 'Описание ошибки'
          example: "У вас недостаточно прав для выполнения данного действия."
          type: string
    NotFound:
      description: Объект не найден
      type: object
      properties:
        detail:
          description: 'Описание ошибки'
          example: "Страница не найдена."
          type: string

  responses:
    ValidationError:
      description: 'Ошибки валидации в стандартном формате DRF'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationError'

    AuthenticationError:
      description: Пользователь не авторизован
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AuthenticationError'

    PermissionDenied:
      description: Недостаточно прав
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PermissionDenied'

    NotFound:
      description: Объект не найден
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NotFound'


  securitySchemes:
    Token:
      description: 'Авторизация по токену. <br>
      Все запросы от имени пользователя должны выполняться с заголовком "Authorization: Token TOKENVALUE"'
      type: http
      scheme: token
